// DataHelper类 - 负责localStorage 操作  负责数据处理
class DataHelper {
    dataKey: string
    primaryKey: string
    
    // let dh = new DataHelper('plData', 'id')

    constructor (dataKey: string, primaryKey: string) {
        this.dataKey = dataKey
        this.primaryKey = primaryKey
    }

    // 1.读取全部数据， 返回数组(如果没有读到数据 就返回 空数组)
    readData():any {
        // 1.读取 本地数据(根据dataKey读取)
        let strData: string | null = localStorage.getItem(this.dataKey)
        // 2.将读取的json数组字符串转成数组对象
        let arrData: any = []
        if(strData != null) {
            arrData = JSON.parse(strData)
        }
        // 3.返回 数组对象
        return arrData
    }
    // 存入本地数据
    saveData(arrData: Array<object>):void {
        // 1.将数组转成字符串
        let str: string = JSON.stringify(arrData)
        // 2.将字符串保存到localStorage中
        localStorage.setItem(this.dataKey, str)
    }
    // 新增数据
    addData(conStr: string): number {
        // 1. 读取localStorage数据，转成数组 [{conten: 'xx', id: '1'},...]
        let arr: any = this.readData()
        // 2. 接收评论内容字符串 conStr
        let obj: object = {
            content: conStr,
        }
        // 3. 将评论内容封装到对象， 并生成id
        let newId = arr.length>0? arr[arr.length-1][this.primaryKey]+1 : 1
        obj[this.primaryKey] = newId
        arr.push(obj)
        // 4. 将评论对象加入数组
        // 5. 将数组转成字符串，保存回localStorage
        this.saveData(arr)
        // 小细节： 返回 刚才生成的评论id
        return newId

    }

    // 删除数据
    removeDataById(id: string): boolean {
        // 1.读取localStorage数据， 转成数组
        let arr: any = this.readData()
        // 2.找出数组中要删除的评论   findIndex方法找到了返回下标，找不到返回-1
        let index = arr.findIndex(ele => {
            return ele[this.primaryKey] = id
        })
        if(index > -1) {
            // 3.调用数组splice方法删除找出的对象
            arr.splice(index, 1)
            // 4.将数组转成字符串， 保存回localstorage
            this.saveData(arr)
            return true
        }
        // 小细节： 返回boolean 值表示删除结果
        return false
    }
}

export default DataHelper